import javax.swing.*;
import java.awt.*;

/*
Layout布局
  a.FlowLayout:依次放组件
    (JApplet,JPanel,JScrollPane默认布局)
  b.BoarderLayout:将组件放边界上
    (JWindow、JFrame,JDialog的默认布局)
  c.CardLayout:扑克牌那样，一次显示一个
  d.GridLayout:按行列分成小格子，依次放,由程序控制
    每个组件大小尽量相同，以行为基准，组件个数不合适自动增减列，
    希望某个位置空白可用空白标签(add(new Label()))顶替，

  e.GridBagLayout:精准控制，一个组件可以占多个小格子
 */
public class Project{
  public static void main(String[]args){
    MyBorder myBorder =new MyBorder();

    ScrollDemo scrollDemo = new ScrollDemo();
  }
}

/*
BorderLayout
  将界面简单分为东南西北中，容器通过add向BorderLayout布局添加组件时应指定位置，默认为中
  1.创建面板
  2.获取容器，设置布局
  3.容器添加组件
  4.显示容器
 */
class MyBorder extends JFrame{
  JLabel label1,label2,label3,label4,label5;
  MyBorder(){
    label1 = new JLabel("label1",JLabel.CENTER);
    label2 = new JLabel("label2",JLabel.CENTER);
    label3 = new JLabel("label3",JLabel.CENTER);
    label4 = new JLabel("label4",JLabel.CENTER);
    label5 = new JLabel("label5",JLabel.CENTER);

    setTitle("MyBorder");
    setSize(500,500);

    Container container = getContentPane();
    container.setLayout(new BorderLayout());
    container.add(label1,"East");
    container.add(label2,"South");
    container.add(label3,"West");
    container.add(label4,"North");
    container.add(label5,"Center");

    setVisible(true);

  }
}

/*
创建一个JPanel的子类，存放十个按钮
  1.GridLayout构造时可指定组件间的间距
  2.String.format("bt%d",i);可实现printf；
  3.setPreferredSize(new Dimension(30,60))可设置自定义大小
 */
class BtList extends JPanel{
  BtList(){
    setBackground(Color.CYAN);
    //指定栅格布局以及组件边距
    setLayout(new GridLayout(10,1,0,10));
    for (int i=0;i<10;i++){
      String name = String.format("bt%d",i);
      JButton bt = new JButton(name);
      //设置默认大小
      bt.setPreferredSize(new Dimension(30,60));
      add(bt);
    }
  }
}

/*
界面滚动综合食用方法
  1.创建子控件，将控件放到面板JPanel上，使用指定布局；
  2.创建一个滚动面板JScrollPane，将带有子控件的面板JPanel放到滚动面板JScrollPane上
  3.将滚动面板JScrollPane添加到主面板上getContentPane(),设置控件可见。
 */
class ScrollDemo extends JFrame{
  JScrollPane jsp;
  BtList btList1, btList2;
  ScrollDemo(){
    //构造子对象
    setSize(300,400);
    jsp = new JScrollPane();
     btList1 = new BtList();
     btList2 = new BtList();
     //使用JPanel存放对象
    JPanel jfr = new JPanel();
    jfr.setLayout(new GridLayout(1,4));
    jfr.add(btList1);
    jfr.add(new JLabel());
    jfr.add(new JLabel());
    jfr.add(btList2);
    //将JPanel的内容放到JScrollPane上
    jsp.setViewportView(jfr);
    //将JScrollPane内容添加到主界面显示
    Container con = getContentPane();
    con.add(jsp);

    setVisible(true);
    //pack();
  }
}